package com.ultimatech.webappdemo.authmgr.service;

import com.ultimatech.webappdemo.authmgr.vo.*;
import com.ultimatech.webappdemo.base.PageResult;
import com.ultimatech.webappdemo.base.model.*;
import org.apache.shiro.authc.AuthenticationException;

import java.util.Date;
import java.util.List;

/**
 * Created by 张乐平 on 7/28 0028.
 */
public interface IAuthService {
    /**
     * 用户登录接口
     *
     * @param userName 登录用户名
     * @param password 密码
     * @throws AuthenticationException
     */
    void logIn(String userName, String password, boolean rememberMe) throws AuthenticationException;

    /**
     * 用户登出系统
     */
    void logOut();

    /**
     * 获得数据库中存储的访问控制数据
     *
     * @return
     */
    List<SysAuthcMap> getFilterChainDefinitions();

    /**
     * 获得系统中所有用户列表，提供给用户管理页面列表使用。
     *
     * @return
     */
    PageResult<SysUser> getUserList(UserVo vo);

    /**
     * 获得系统所有角色信息，提供给添加用户时，显示所有角色，给用户选择
     *
     * @return 返回所有用户列表
     */
    List<SysRole> getAllRoles();

    void createUser(AddUserVo vo) throws Exception;

    /**
     * 用户管理中提供删除用户功能。
     *
     * @param userId 用户数据主键值
     * @return
     */
    void delUser(Integer userId);

    /**
     * 修改用户时根据用户id获得用户信息
     *
     * @param userId 用户id
     * @return 返回一个非POJO对象，防止hibernate在json序列化时出现死循环。
     */
    AddUserVo getUserById(Integer userId);

    /**
     * 更新用户信息
     *
     * @param vo ui提交的用户信息表单数据
     */
    void modifyUser(AddUserVo vo) throws Exception;

    /**
     * 获得系统中所有角色列表，提供给角色管理页面列表使用。
     *
     * @return
     */
    PageResult<SysRole> getRoleList(RoleVo vo);

    /**
     * 创建ROLE
     */
    void createRole(AddRoleVo vo) throws Exception;

    /**
     * 修改用户时根据角色id获得角色信息
     *
     * @param roleId 角色id
     * @return 返回一个非POJO对象，防止hibernate在json序列化时出现死循环。
     */
    AddRoleVo getRoleById(Integer roleId);

    /**
     * 更新角色信息
     *
     * @param vo ui提交的角色信息表单数据
     */
    void modifyRole(AddRoleVo vo) throws Exception;

    /**
     * 用户管理中提供删除角色功能。
     *
     * @param roleId 角色数据主键值
     * @return
     */
    void delRole(Integer roleId);


    PageResult<SysMyPermission> getpermList(PermsVo vo);

    PermsVo getPermById(Integer roleId);

    void updatePerm(PermsVo vo);

    void delPerm(Integer id);

    SysUser getUserByLoginName(String loginName);

    /**
     * 创建用户组，实际业务中代表接入新的微信公众号
     *
     * @param name      公众号在系统中的唯一名称，英文字母组成
     * @param appid     公众号appid
     * @param appsecret 公众号appsecret
     * @param descript  描述
     * @param expired   过期时间
     */
    void createGroup(String name, String moduleName,String appid, String appsecret, String descript, Date expired);


    PageResult<SysGroup> getgroupList(GroupVo vo);

    void testHibernate();

    SysGroup getGroupByName(String name);


}
